package com.zenithmind.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.user.pojo.domain.TenantConfig;

import java.util.List;
import java.util.Map;

/**
 * 租户配置服务接口
 * 
 * @author ZenithMind
 * @since 2024-06-30
 */
public interface TenantConfigService extends IService<TenantConfig> {

    /**
     * 获取租户配置值
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @return 配置值
     */
    String getConfigValue(String tenantId, String configKey);

    /**
     * 获取租户配置值（带默认值）
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @param defaultValue 默认值
     * @return 配置值
     */
    String getConfigValue(String tenantId, String configKey, String defaultValue);

    /**
     * 获取租户配置值（指定类型）
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @param clazz 值类型
     * @param <T> 泛型类型
     * @return 配置值
     */
    <T> T getConfigValue(String tenantId, String configKey, Class<T> clazz);

    /**
     * 获取租户配置值（指定类型，带默认值）
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @param clazz 值类型
     * @param defaultValue 默认值
     * @param <T> 泛型类型
     * @return 配置值
     */
    <T> T getConfigValue(String tenantId, String configKey, Class<T> clazz, T defaultValue);

    /**
     * 设置租户配置
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @param configValue 配置值
     * @param configType 配置类型
     * @param description 配置描述
     * @return 是否成功
     */
    boolean setConfig(String tenantId, String configKey, String configValue, String configType, String description);

    /**
     * 设置租户配置（简化版）
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @param configValue 配置值
     * @return 是否成功
     */
    boolean setConfig(String tenantId, String configKey, Object configValue);

    /**
     * 删除租户配置
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @return 是否成功
     */
    boolean deleteConfig(String tenantId, String configKey);

    /**
     * 获取租户所有配置
     * 
     * @param tenantId 租户ID
     * @return 配置列表
     */
    List<TenantConfig> getTenantConfigs(String tenantId);

    /**
     * 获取租户所有配置（Map形式）
     * 
     * @param tenantId 租户ID
     * @return 配置Map
     */
    Map<String, String> getTenantConfigMap(String tenantId);

    /**
     * 获取租户系统配置
     * 
     * @param tenantId 租户ID
     * @return 系统配置列表
     */
    List<TenantConfig> getSystemConfigs(String tenantId);

    /**
     * 获取租户用户配置
     * 
     * @param tenantId 租户ID
     * @return 用户配置列表
     */
    List<TenantConfig> getUserConfigs(String tenantId);

    /**
     * 批量设置租户配置
     * 
     * @param tenantId 租户ID
     * @param configs 配置Map
     * @return 是否成功
     */
    boolean batchSetConfigs(String tenantId, Map<String, Object> configs);

    /**
     * 初始化租户默认配置
     * 
     * @param tenantId 租户ID
     * @return 是否成功
     */
    boolean initDefaultConfigs(String tenantId);

    /**
     * 复制配置到新租户
     * 
     * @param sourceTenantId 源租户ID
     * @param targetTenantId 目标租户ID
     * @return 是否成功
     */
    boolean copyConfigs(String sourceTenantId, String targetTenantId);

    /**
     * 检查配置是否存在
     * 
     * @param tenantId 租户ID
     * @param configKey 配置键
     * @return 是否存在
     */
    boolean existsConfig(String tenantId, String configKey);
}
